<?php
namespace app\admin\controller;
use think\Db;

class Admin extends Base
{
    // 管理员列表
     public function admin_list(){

        // 非超级管理员不可访问
        if(!is_super_admin()) {
            $this->error(lang('FORBID_ACCESS'));
        }

        // 查询管理员列表
        $data = Db::name('admin')
                ->field('id,account,status,login_time,login_count,create_time')
                ->order('id desc')
                ->select();

        $this->assign('data',$data);
        return $this->fetch();
    }


    // 添加管理员
    public function administrator_add(){
        if (!$this->request->isPost()) {
            $this->error(lang('WRONG_REQUEST'));
        }
        // 非超级管理员不可访问
        if(!is_super_admin()) {
            $this->error(lang('FORBID_ACCESS'));
        }

        // 获取用户名
        $account = $this->request->post('account','');
        if(!check_admin_username($account)) {
            $this->error(lang('ACCOUNT_NOT_FIT')); // 账号不符合规定
        }

        // 检测用户名重复
        $isseted = Db::name('admin')
                ->where('account', $account)
                ->limit(1)
                ->count();
        if($isseted){
            $this->error(lang('ACCOUNT_REPEATED'));  //用户名重复
        }

        // 获取随机密码
        $password = get_random_string();

        $data = array(
            "account"       =>  $account,
            "password"      =>  encrypt_password($password),
            "create_time"   =>  time()
            );
        Db::name('admin')->insert($data);
        $this->success(lang('ADD_SUCCESS'), null, $password);
    }
     
    // 删除管理员
    public function administrator_delete(){
        if (!$this->request->isPost()) {
            $this->error(lang('WRONG_REQUEST'));
        }
        // 非超级管理员不可访问
        if(!is_super_admin()) {
            $this->error(lang('FORBID_ACCESS'));
        }

        $id = $this->request->post('id','0');
        if(!$id){
            $this->error(lang('ADMIN_ID_REQUEST'));   // id不能为空
        }
        if($id == 1){
            $this->error(lang('FORBID_OPERATE_SUPPER'));   //不允许禁用超级管理员
        }

        // 检查用户是否存在
        $isseted = Db::name('admin')
                ->where('id', $id)
                ->limit(1)
                ->count();
        if(!$isseted){
            $this->error(lang('USER_NOT_EXIST'));
        }

        // delete 方法返回影响数据的条数，没有删除返回 0
        Db::name('admin')->delete($id);
        $this->success(lang('DELETE_SUCCESS'));
    }

    // 管理员密码重置
    public function administrator_reset(){
        if (!$this->request->isPost()) {
            $this->error(lang('WRONG_REQUEST'));
        }
        // 非超级管理员不可访问
        if(!is_super_admin()) {
            $this->error(lang('FORBID_ACCESS'));
        }

        $id = $this->request->post('id','0');
        if(!$id){
            $this->error(lang('ADMIN_ID_REQUEST'));   // id不能为空
        }
        if($id == 1){
            $this->error(lang('FORBID_OPERATE_SUPPER'));   //不允许禁用超级管理员
        }
                
        // 检查用户是否存在
        $isseted = Db::name('admin')
                ->where('id', $id)
                ->limit(1)
                ->count();
        if(!$isseted){
            $this->error(lang('USER_NOT_EXIST'));
        }

        // 获取随机密码
        $password = get_random_string();

        $new_pass = encrypt_password($password);

        // update 方法返回影响数据的条数，没修改任何数据返回 0
        Db::name('admin')->where('id', $id)->update(['password' => $new_pass]);
        $this->success(lang('RESET_SUCCESS'), null, $password);

        // if(!empty($admininfo['email'])){
        //     $content = '你好, <b>'.$admininfo['account'].'</b>! <br/>这是一封来自<a href="http://act.wapui.com" target="_blank">act.wapui.com</a>的邮件！<br/>你的密码被重置为：'.$password;
        //     send_email($admininfo['email'],'密码重置',$content);
        // }
    }

    // 禁用/解禁用户
    public function administrator_disable(){
        if (!$this->request->isPost()) {
            $this->error(lang('WRONG_REQUEST'));
        }
        // 非超级管理员不可访问
        if(!is_super_admin()) {
            $this->error(lang('FORBID_ACCESS'));
        }

        $id = $this->request->post('id','0');
        if(!$id){
            $this->error(lang('ADMIN_ID_REQUEST'));   // id不能为空
        }
        if($id == 1){
            $this->error(lang('FORBID_OPERATE_SUPPER'));   //不允许禁用超级管理员
        }
                
        // 检查用户是否存在
        $isseted = Db::name('admin')
                ->where('id', $id)
                ->field('status')
                ->limit(1)
                ->find();
        if(!$isseted){
            $this->error(lang('USER_NOT_EXIST'));
        }

        $current_status = $isseted['status'];

        // setField 方法返回影响数据的条数，没修改任何数据字段返回 0
        Db::name('admin')->where('id', $id)->setField('status', abs($current_status - 1));
        $this->success(lang('OPERATE_SUCCESS'));
    }

    // 修改密码
    public function administrator_edit(){
        if (!$this->request->isPost()) {
            $this->error(lang('WRONG_REQUEST'));
        }

        $id = get_admin_id();
        $old_pwd = $this->request->post('old_pwd','');
        $new_pwd = $this->request->post('new_pwd','');

        if(!check_admin_password($new_pwd)) {
            $this->error(lang('PASSWORD_NOT_FIT')); // 新密码规则不符合规定
        }

        // 给密码加密
        $old_pwd_ok = encrypt_password($old_pwd);
        $new_pwd_ok = encrypt_password($new_pwd);

        // 查询原密码是否正确
        $data = Db::name('admin')
                ->where('id', $id)
                ->where('password',$old_pwd_ok)
                ->field('id')
                ->find();

        if(empty($data)){
            $this->error(lang('PASSWORD_NOT_RIGHT'));
        }

        // setField 方法返回影响数据的条数，没修改任何数据字段返回 0
        Db::name('admin')->where('id', $id)->setField('password', $new_pwd_ok);

        session(null);

        $this->success(lang('EDIT_SUCCESS'));
    }


}
